/*Copyright (C) 2009 - 2011 MASSART GAUTHIER

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/

#include "../headers.h"

void edit_level_pack(char jeu[20]) {
	int choix;

	do {
		clear();
		choix = afficher_menu_jeu("Ajouter un pack\nRenommer un pack\nSupprimer un pack\nSupprimer un niveau\nRetour\n", TITRE_SNAKE);

		if(choix == 1) {
			if(!add_pack(jeu)) {
				CSLP_ColorText(COLOR_GREEN);
				addstr("\n\n Ajout du niveau réusit.");
				getch();
			}
		}
		else if(choix == 2) {
			if(!rename_pack(jeu)) {
				CSLP_ColorText(COLOR_GREEN);
				addstr("\n\n Changement de nom du niveau réussi.");
				getch();
			}
		}
		else if(choix == 3) {
			if(!suppr_pack(jeu)) {
				CSLP_ColorText(COLOR_GREEN);
				addstr("\n\n Suppression du pack  : réussite..");
				getch();
			}
		}
		else if(choix == 4) {
			if(!suppr_level(jeu)) {
				CSLP_ColorText(COLOR_GREEN);
				addstr("\n\n Suppression du niveau  : réussite..");
				getch();
			}
		}
	}
	while(choix != 5);

}

int add_pack(char jeu[20]) {
	int nb_pack;
	char packs_list[25600], pack_name_list[20], new_name[256], root_new_name[300];

	nb_pack = get_packs_list(jeu, packs_list);
	sprintf(pack_name_list, "pack%d", nb_pack + 1);

	clear();
	afficher_titre(TITRE_SNAKE);
	CSLP_ColorText(CT);
	addstr("\n\n Entrez le nom du pack de niveaux que vous voulez créer : ");
	lire(new_name, 256);


	if(new_name[0] != '\0') {

		strcat(new_name, ".pak");
		sprintf(root_new_name, "%s%s", PACKS_PERSO_ROOT, new_name);

		if(fichier_creer(root_new_name)) {
			CSLP_ColorText(COL_ERREUR);
			addstr("\n\n La création du fichier a échoué.");
			getch();
			return 1;
		}
		else {
			ini_puts(jeu, pack_name_list, new_name, LIST_PACKS_FILENAME);
			return 0;
		}
	}
	else {
		CSLP_ColorText(COL_ERREUR);
		addstr("\n\n Je ne doute pas que vous trouverez un nom plus long.\n");
		getch();
		return 1;
	}
}

int add_pack_auto(char jeu[20], char new_name[256]) {
	int nb_pack;
	char packs_list[25600], pack_name_list[20], root_new_name[300];

	nb_pack = get_packs_list(jeu, packs_list);
	sprintf(pack_name_list, "pack%d", nb_pack + 1);

	if(new_name[0] != '\0') {

		strcat(new_name, ".pak");
		sprintf(root_new_name, "%s%s", PACKS_PERSO_ROOT, new_name);

		if(fichier_creer(root_new_name)) {
			CSLP_ColorText(COL_ERREUR);
			addstr("\n\n La création du fichier a échoué.");
			getch();
			return 1;
		}
		else {
			ini_puts(jeu, pack_name_list, new_name, LIST_PACKS_FILENAME);
			return 0;
		}
	}
	else {
		CSLP_ColorText(COL_ERREUR);
		addstr("\n\n Je ne doute pas que vous trouverez un nom plus long.\n");
		getch();
		return 1;
	}
}

int rename_pack(char jeu[20]) {
	int choix, nb_pack;
	char packs_list[25600], pack_name_file[256], new_name[256], root_new_name_file[300], pack_name_list[20], root_old_name_file[300];

	nb_pack = get_packs_list(jeu, packs_list);
	sprintf(pack_name_list, "pack%d", nb_pack + 1);

	if(!nb_pack) {
		CSLP_ColorText(COL_ERREUR);
		addstr("\n\n Vous n'avez pas encore créé de packs.");
		getch();
		return 1;
	}
	else {
		clear();
		choix = afficher_menu(packs_list, "Choisissez le pack à renommer :", TITRE_SNAKE);
		clear();

		if(choix <= nb_pack) {
			get_packs_name(jeu, pack_name_file, choix);
			afficher_titre(TITRE_SNAKE);
			CSLP_ColorText(CT);
			addstr(pack_name_file);
			addstr(" Entrez le nouveau nom du pack de niveau : ");
			refresh();
			lire(new_name, 256);
			strcat(new_name, ".pak");
			sprintf(root_old_name_file, "%s%s", PACKS_PERSO_ROOT, pack_name_file);
			sprintf(root_new_name_file, "%s%s", PACKS_PERSO_ROOT, new_name);

			if(rename(root_old_name_file, root_new_name_file) != 0) {
				CSLP_ColorText(COL_ERREUR);
				addstr("\n\n Le changement de nom du fichier à échoué.");
				getch();
				return 1;
			}
			else {
				sprintf(pack_name_list, "pack%d", choix);
				ini_puts(jeu, pack_name_list, new_name, LIST_PACKS_FILENAME);
				return 0;
			}
		}
		else {
			return 1;
		}
	}

}

int suppr_pack(char jeu[20]) {
	int choix, nb_pack, i;
	char packs_list[25600], pack_name_file[256], filename[256], pack_name_list[20], root_pack_filename[300];

	nb_pack = get_packs_list(jeu, packs_list);
	sprintf(pack_name_list, "pack%d", nb_pack + 1);

	if(!nb_pack) {
		CSLP_ColorText(COL_ERREUR);
		addstr("\n\n Vous n'avez pas encore créé de packs.");
		getch();
		return 1;
	}
	else {
		clear();
		choix = afficher_menu(packs_list, "Choisissez le pack à supprimer :", TITRE_SNAKE);


		if(choix <= nb_pack) {
			get_packs_name(jeu, pack_name_file, choix);
			sprintf(root_pack_filename, "%s%s", PACKS_PERSO_ROOT, pack_name_file);

			i = choix;

			while(i != nb_pack) {
				sprintf(pack_name_list, "pack%d", i + 1);
				ini_gets(jeu, pack_name_list, "aap", filename, sizearray(filename), LIST_PACKS_FILENAME);
				sprintf(pack_name_list, "pack%d", i);
				ini_puts(jeu, pack_name_list, filename, LIST_PACKS_FILENAME);
				i++;
			}

			sprintf(pack_name_list, "pack%d", nb_pack);
			ini_puts(jeu, pack_name_list, NULL, LIST_PACKS_FILENAME);
			remove(root_pack_filename);
			return 0;
		}
		else {
			return 1;
		}
	}
}

int suppr_level(char jeu[20]) {
	int choix, nb_pack, nb_levels, i = 0;
	char packs_list[25600], pack_name_file[256], root_pack_filename[300], level_list[50000], level_name[50], transfert[100], level[1000][50] = {{0}};

	nb_pack = get_packs_list(jeu, packs_list);

	if(!nb_pack) {
		CSLP_ColorText(COL_ERREUR);
		addstr("\n\n Vous n'avez pas encore créé de packs.");
		getch();
		return 1;
	}
	else {
		clear();
		choix = afficher_menu(packs_list, "Choisissez le pack où supprimer le niveau :", TITRE_SNAKE);


		if(choix <= nb_pack) {
			strcpy(level_list, "\0");
			get_packs_name(jeu, pack_name_file, choix);
			sprintf(root_pack_filename, "%s%s", PACKS_PERSO_ROOT, pack_name_file);

			nb_levels = get_level_list(root_pack_filename, level, NULL);

			if(!nb_levels) {
				CSLP_ColorText(COL_ERREUR);
				addstr("\n\n Le format du fichier est invalide ou le pack est vide.");
				getch();
				return 1;
			}

			while(i != nb_levels) {
				sprintf(transfert, "%s\n", level[i]);
				strcat(level_list, transfert);
				i++;
			}

			strcat(level_list, "Retour\n");
			clear();
			choix = afficher_menu(level_list, "Choisissez le niveau à éditer :", TITRE_SNAKE);

			if(choix <= nb_levels) {
				sprintf(level_name, "%s", level[choix-1]);
				addstr(level_name);
				getch();
				ini_puts(level_name, NULL, NULL, root_pack_filename);
				return 0;
			}
			else {
				return 1;
			}
		}
		else {
			return 1;
		}
	}
}

int get_packs_list(char jeu[20], char packs_list[25600]) {
	long i, nb_packs = 0;
	char key[10], str[256], transfert[256];

	strcpy(packs_list, "\0");

	if(fichier_existe(LIST_PACKS_FILENAME)) {
		for(i = 0; ini_getkey(jeu, i, key, sizearray(key), LIST_PACKS_FILENAME) > 0; i++) {
			ini_gets(jeu, key, "aap", str, sizearray(str), LIST_PACKS_FILENAME);
			sprintf(transfert, "%s\n", str);
			strcat(packs_list, transfert);
			nb_packs++;
		}

		strcat(packs_list, "Retour\n");
	}
	else {
		return 0;
	}

	return nb_packs;

}

int get_level_list(char *filename, char level[1000][50], char author[1000][100]) {
	int i = 0, nb_name = 0, nb_author = 0;
	char texte[100];

	for(i = 0; ini_getsection(i, texte, sizearray(texte), filename) > 0;  i++) {
		strcpy(level[i], texte);
		nb_name++;
	}

	for(i = 0; level[i][0] != 0;  i++) {
		ini_gets(level[i], "auteur", "aap", texte, sizearray(texte), filename);
		strcpy(author[i], texte);
		nb_author++;
	}

	if(nb_name != nb_author) {
		return 0;
	}

	return nb_name;
}

int get_packs_name(char jeu[20], char pack_name[256], long choix) {
	char str[256], key[20];
	sprintf(key, "pack%ld", choix);

	if(fichier_existe(LIST_PACKS_FILENAME)) {
		ini_gets(jeu, key, "aap", str, sizearray(str), LIST_PACKS_FILENAME);
		strcpy(pack_name, str);
	}
	else {
		return 1;
	}

	return 0;
}

int choose_pack(char jeu[20], char root_pack_filename[300]) {
	int choix, nb_pack;
	char packs_list[25600], pack_name_file[256];

	nb_pack = get_packs_list(jeu, packs_list);

	if(!nb_pack) {
		CSLP_ColorText(COL_ERREUR);
		addstr("\n\n Vous n'avez pas encore créé de packs.");
		getch();
		return 1;
	}
	else {
		clear();
		choix = afficher_menu(packs_list, "Choisissez un pack :", TITRE_SNAKE);

		if(choix <= nb_pack) {
			get_packs_name(jeu, pack_name_file, choix);
			sprintf(root_pack_filename, "%s%s", PACKS_PERSO_ROOT, pack_name_file);
			return 0;
		}
		else {
			return 1;
		}
	}
}

